 /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.entidade.protocolo;

import br.com.deployment.entidade.acesso.Usuario;
import br.com.deployment.entidade.empresa.Cartorio;
import br.com.deployment.entidade.humana.Pessoa;
import br.com.deployment.enums.FormasPagamento;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.Digits;
import javax.validation.constraints.NotNull;

/**
 *
 * @author roniere
 */
@Entity
public class Protocolo implements Serializable{
    
    @Id
    @SequenceGenerator(name = "seq_protocolo", sequenceName = "seq_protocolo", allocationSize=1 )
    @GeneratedValue(generator = "seq_protocolo", strategy = GenerationType.SEQUENCE)
    private int id;
    
    @Temporal(TemporalType.DATE)
    private Date dataCad;
    
    @ManyToOne
    @NotNull(message="Informe o Interessado")
    private Pessoa cliente;
    
    @OneToOne
    private Usuario usuario;
    
    @OneToMany(cascade= CascadeType.ALL, fetch= FetchType.EAGER)
    private List<ServicoProtocolo> servicoProtocolos;
    
    @OneToMany(cascade= CascadeType.ALL, fetch= FetchType.EAGER)
    private List<Parcela> parcelas;
    
    @Enumerated
    private FormasPagamento formasPagamento;
    
    @Column(scale= 2, precision=19)
    @NotNull
    @DecimalMin( value = "0.00" )
    @Digits( fraction = 2, integer = 10 )
    private BigDecimal valorTotalCartorio;
    
    @Column(scale= 2, precision=19)
    @NotNull
    @DecimalMin( value = "0.00" )
    @Digits( fraction = 2, integer = 10 )
    private BigDecimal valorTotalFermojupi;
    
    private boolean gratuidade;
    
    @Column
    private boolean ativo;
    
    @Column(length=500)
    private String obs;
    
    @OneToOne
    private Cartorio cartorio;
    
    public Protocolo() {
        this.ativo = true;
    }

    public Cartorio getCartorio() {
        return cartorio;
    }

    public void setCartorio(Cartorio cartorio) {
        this.cartorio = cartorio;
    }
    
    

    public String getObs() {
        return obs;
    }

    public void setObs(String obs) {
        this.obs = obs;
    }

    
    
    public List<Parcela> getParcelas() {
        return parcelas;
    }

    public boolean isGratuidade() {
        return gratuidade;
    }

    public void setGratuidade(boolean gratuidade) {
        this.gratuidade = gratuidade;
    }

    public BigDecimal getValorTotalCartorio() {
        return valorTotalCartorio;
    }

    public void setValorTotalCartorio(BigDecimal valorTotalCartorio) {
        this.valorTotalCartorio = valorTotalCartorio;
    }

    public BigDecimal getValorTotalFermojupi() {
        return valorTotalFermojupi;
    }

    public void setValorTotalFermojupi(BigDecimal valorTotalFermojupi) {
        this.valorTotalFermojupi = valorTotalFermojupi;
    }

    public void setParcelas(List<Parcela> parcelas) {
        this.parcelas = parcelas;
    }
    
    

    public boolean isAtivo() {
        return ativo;
    }

    

    public void setAtivo(boolean ativo) {
        this.ativo = ativo;
    }

    public Pessoa getCliente() {
        return cliente;
    }

    public void setCliente(Pessoa cliente) {
        this.cliente = cliente;
    }

    public Date getDataCad() {
        return dataCad;
    }

    public void setDataCad(Date dataCad) {
        this.dataCad = dataCad;
    }

    public FormasPagamento getFormasPagamento() {
        return formasPagamento;
    }

    public void setFormasPagamento(FormasPagamento formasPagamento) {
        this.formasPagamento = formasPagamento;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public List<ServicoProtocolo> getServicoProtocolos() {
        return servicoProtocolos;
    }

    public void setServicoProtocolos(List<ServicoProtocolo> servicoProtocolos) {
        this.servicoProtocolos = servicoProtocolos;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Protocolo other = (Protocolo) obj;
        if (this.id != other.id) {
            return false;
        }
        if (this.dataCad != other.dataCad && (this.dataCad == null || !this.dataCad.equals(other.dataCad))) {
            return false;
        }
        if (this.cliente != other.cliente && (this.cliente == null || !this.cliente.equals(other.cliente))) {
            return false;
        }
        if (this.usuario != other.usuario && (this.usuario == null || !this.usuario.equals(other.usuario))) {
            return false;
        }
        if (this.servicoProtocolos != other.servicoProtocolos && (this.servicoProtocolos == null || !this.servicoProtocolos.equals(other.servicoProtocolos))) {
            return false;
        }
        if (this.formasPagamento != other.formasPagamento) {
            return false;
        }
        if (this.ativo != other.ativo) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 23 * hash + this.id;
        hash = 23 * hash + (this.dataCad != null ? this.dataCad.hashCode() : 0);
        hash = 23 * hash + (this.cliente != null ? this.cliente.hashCode() : 0);
        hash = 23 * hash + (this.usuario != null ? this.usuario.hashCode() : 0);
        hash = 23 * hash + (this.servicoProtocolos != null ? this.servicoProtocolos.hashCode() : 0);
        hash = 23 * hash + (this.formasPagamento != null ? this.formasPagamento.hashCode() : 0);
        hash = 23 * hash + (this.ativo ? 1 : 0);
        return hash;
    }

    @Override
    public String toString() {
        return "Protocolo{" + "id=" + id + ", dataCad=" + dataCad + ", cliente=" + cliente + ", usuario=" + usuario + ", servicoProtocolos=" + servicoProtocolos + ", parcelas=" + parcelas + ", formasPagamento=" + formasPagamento + ", valorTotalCartorio=" + valorTotalCartorio + ", valorTotalFermojupi=" + valorTotalFermojupi + ", gratuidade=" + gratuidade + ", ativo=" + ativo + ", obs=" + obs + ", cartorio=" + cartorio + '}';
    }

    
    
    
    
    
    
}
